define [
  'chaplin'
  'views/base/form_view'
  'text!templates/user/form.html'
  'lib/number_utils'
  'collections/banco_collection'
], (Chaplin, BaseFormView, Template, NumberUtils, BancoCollection) ->

  'use strict'

  class UsuarioFormView extends BaseFormView

    # Override Attributes
    # =============================================================

    template: Template

    validationRules :
      nome          :
        required  : true
        maxlength : 255
      email:
        email     : true
        maxlength : 255
        required  : true
      username :
        required  : true
      agencia     :
        required  : true
        maxlength : 255
      banco       :
        required  : true
      gerente     :
        required  : true
        maxlength : 255
      numeroConta :
        required  : true
      saldo       :
        required  : true
      salario     :
        required  : true

    validatorSettings: ignore: ''

    # Override Methods
    # =============================================================

    initialize: (options={}) ->
      _.extend @, options

      @bancoCollection = new BancoCollection
      promise = @bancoCollection.fetch()
      promise.done =>
        super


    afterRender: ->
      super
      @setupMasks()

    setupMasks: ->
      @DOMElements.$salario   .setMask 'decimal'
      @DOMElements.$saldo     .setMask 'decimal'

    getTemplateData: ->
      _.extend super,
        bancos   : _.generateOptions @bancoCollection, 'id', 'nome'
        isNovoUsuario : @isNovoUsuario

    cacheDOMElements: ->
      _.extend super,
        $nome         : @$ '#nome'
        $username     : @$ '#username'
        $email        : @$ '#email'
        $agencia      : @$ '#agencia'
        $banco        : @$ '#banco'
        $gerente      : @$ '#gerente'
        $numeroConta  : @$ '#numero-conta'
        $saldo        : @$ '#saldo'
        $salario      : @$ '#salario'

    fillForm: ->
      @DOMElements.$nome         .val   @model.get('nome')
      @DOMElements.$username     .val   @model.get('usuario')
      @DOMElements.$email        .val   @model.get('email')
      @DOMElements.$agencia      .val   @model.get('agencia')
      @DOMElements.$banco        .val   @model.get('bancoId')
      @DOMElements.$gerente      .val   @model.get('gerente')
      @DOMElements.$numeroConta  .val   @model.get('numeroConta')
      @DOMElements.$saldo        .val   @setDecimal(@model.get('saldo'))
      @DOMElements.$salario      .val   @setDecimal(@model.get('salario'))

    fillModel: ->
      @model.set
        nome         : @DOMElements.$nome.val()
        usuario      : @DOMElements.$username.val()
        email        : @DOMElements.$email.val()
        agencia      : @DOMElements.$agencia.val()
        bancoId      : @DOMElements.$banco.val()
        gerente      : @DOMElements.$gerente.val()
        numeroConta  : @DOMElements.$numeroConta.val()
        saldo        : @fixDecimal(@DOMElements.$saldo.val())
        salario      : @fixDecimal(@DOMElements.$salario.val())

    setDecimal: (val) ->
      if val
        return NumberUtils.number_format(val, 2, ',', '.')
      else
        return '0,00'

    fixDecimal: (val='') ->
      return val.replace(/\./g, '').replace ',', '.'

